#pragma once

#include <string>
#include <pthread.h>
#include <cstdio>

typedef void*(*func_t)(void*);

class ThreadData
{
public:
    void *_args;        // 线程执行例程的参数
    std::string _name;  // 线程名
    pthread_t _tid;     // 线程ID
};

class Thread
{
public:
    Thread(int num, func_t callBack, void* args)
        : _func(callBack)
    {
        char nameBuffer[64];
        snprintf(nameBuffer, sizeof nameBuffer, "Thread %d", num);
        _data._args = args;
        _data._name = nameBuffer;
    }

    // 创建线程
    void Create()
    {
        pthread_create(&_data._tid, nullptr, _func, (void*)&_data);
    }

    // 等待线程
    void Join()
    {
        pthread_join(_data._tid, nullptr);
    }

    // 返回线程的名字
    std::string Name()
    {
        return _data._name;
    }

    ~Thread()
    {}

private:
    func_t _func;       // 线程的执行例程
    ThreadData _data;   // 线程的属性
};